package structure.link;

/**
 * 创建时间：2018年01月03日10:49 <br>
 * 作者：fuchaoyang <br>
 * 描述： 利用链表实现栈
 */

public class Stack<T> {
  private Node<T> mFirst;

  /**
   * 压入栈顶
   */
  public T push(T data) {
    Node<T> tData = new Node<>(data);
    tData.next = mFirst;
    mFirst = tData;
    return data;
  }

  /**
   * 返回并移除栈顶元素
   */
  public T pop() {
    if (mFirst == null) return null;
    Node<T> temp = mFirst;
    mFirst = mFirst.next;
    return temp.data;
  }

  /**
   * 查看栈顶元素
   */
  public T peek() {
    return mFirst != null ? mFirst.data : null;
  }

  public void display() {
    Node<T> temp = mFirst;
    while (temp != null) {
      System.out.print(temp.data.toString() + ",");
      temp = temp.next;
    }
  }
}
